home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 September / PCWorld_2002-09_cd.bin / Software / Vyzkuste / httrack / httrack-3.20RC4.exe / {app} / src / htslib.h < prev    next >
C/C++ Source or Header  |  2002-07-09  |  13KB  |  339 lines

  1. /* ------------------------------------------------------------ */
  2. /*
  3. HTTrack Website Copier, Offline Browser for Windows and Unix
  4. Copyright (C) Xavier Roche and other contributors
  5.  
  6. This program is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU General Public License
  8. as published by the Free Software Foundation; either version 2
  9. of the License, or any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  19.  
  20.  
  21. Important notes:
  22.  
  23. - We hereby ask people using this source NOT to use it in purpose of grabbing
  24. emails addresses, or collecting any other private information on persons.
  25. This would disgrace our work, and spoil the many hours we spent on it.
  26.  
  27.  
  28. Please visit our Website: http://www.httrack.com
  29. */
  30.  
  31.  
  32. /* ------------------------------------------------------------ */
  33. /* File: Subroutines .h                                         */
  34. /* Author: Xavier Roche                                         */
  35. /* ------------------------------------------------------------ */
  36.  
  37. // Fichier librairie .h
  38.  
  39. #ifndef HTS_DEFH
  40. #define HTS_DEFH 
  41.  
  42. /* dΘfinitions globales */
  43. #include "htsglobal.h"
  44.  
  45. /* basic net definitions */
  46. #include "htsbasenet.h"
  47.  
  48. /* cookies et auth */
  49. #include "htsbauth.h"
  50.  
  51. // Attention, dΘfinition existante Θgalement dans le shell
  52. // (α modifier avec celle-ci)
  53. #define POSTTOK "?>post"
  54.  
  55. #include <stdio.h>
  56.  
  57. #include "htsopt.h"
  58.  
  59. // structure pour paramΦtres supplΘmentaires lors de la requΩte
  60. typedef struct {
  61.   short int user_agent_send;  // user agent (ex: httrack/1.0 [sun])
  62.   short int http11;           // l'en tΩte peut (doit) Ωtre signΘ HTTP/1.1 et non HTTP/1.0
  63.   short int range_used;       // Range utilisΘ
  64.   short int nocompression;    // Pas de compression
  65.   char user_agent[64];
  66.   char lang_iso[64];
  67.   t_proxy proxy;              // proxy
  68. } htsrequest;
  69.  
  70.  
  71. // structure pour retour d'une connexion/prise d'en tΩte
  72. typedef struct {
  73.   int statuscode;        // status-code, -1=erreur, 200=OK,201=..etc (cf RFC1945)
  74.   short int notmodified; // page ou fichier NON modifiΘ (transfΘrΘ)
  75.   short int is_write;    // sortie sur disque (out) ou en mΘmoire (adr)
  76.   short int is_chunk;    // mode chunk
  77.   short int compressed;  // compressΘ?
  78.   char* adr;             // adresse du bloc de mΘmoire, NULL=vide
  79.   FILE* out;             // Θcriture directe sur disque (si is_write=1)
  80.   LLint size;            // taille fichier
  81.   char msg[80];          // message Θventuel si Θchec ("\0"=non prΘcisΘ)
  82.   char contenttype[64];  // content-type ("text/html" par exemple)
  83.   char contentencoding[64];  // content-encoding ("gzip" par exemple)
  84.   char* location;        // on copie dedans Θventuellement la vΘritable 'location'
  85.   LLint totalsize;       // taille totale α tΘlΘcharger (-1=inconnue)
  86.   short int is_file;     // ce n'est pas une socket mais un descripteur de fichier si 1
  87.   T_SOC soc;             // ID socket
  88.   FILE* fp;              // fichier pour file://
  89. #if HTS_USEOPENSSL
  90.   short int ssl;         // is this connection a SSL one? (https)
  91.   // BIO* ssl_soc;          // SSL structure
  92.   SSL * ssl_con;         // connection structure
  93. #endif
  94.   char lastmodified[64]; // Last-Modified
  95.   char etag[64];         // Etag
  96.   char cdispo[256];      // Content-Disposition coupΘ
  97.   LLint  crange;         // Content-Range
  98.   /* */
  99.   htsrequest req;  // paramΦtres pour la requΩte
  100.   /*char digest[32+2];  // digest md5 gΘnΘrΘ par le moteur ("" si non gΘnΘrΘ)*/
  101. } htsblk;
  102.  
  103.  
  104. /* ANCIENNE STURCTURE pour cache 1.0 */
  105. typedef struct {
  106.   int statuscode;  // ANCIENNE STURCTURE - status-code, -1=erreur, 200=OK,201=..etc (cf RFC1945)
  107.   int notmodified; // ANCIENNE STURCTURE - page ou fichier NON modifiΘ (transfΘrΘ)
  108.   int is_write;    // ANCIENNE STURCTURE - sortie sur disque (out) ou en mΘmoire (adr)
  109.   char* adr;       // ANCIENNE STURCTURE - adresse du bloc de mΘmoire, NULL=vide
  110.   FILE* out;       // ANCIENNE STURCTURE - Θcriture directe sur disque (si is_write=1)
  111.   int size;        // ANCIENNE STURCTURE - taille fichier
  112.   char msg[80];    // ANCIENNE STURCTURE - message Θventuel si Θchec ("\0"=non prΘcisΘ)
  113.   char contenttype[64];  // ANCIENNE STURCTURE - content-type ("text/html" par exemple)
  114.   char* location;  // ANCIENNE STURCTURE - on copie dedans Θventuellement la vΘritable 'location'
  115.   int totalsize;   // ANCIENNE STURCTURE - taille totale α tΘlΘcharger (-1=inconnue)
  116.   int is_file;     // ANCIENNE STURCTURE - ce n'est pas une socket mais un descripteur de fichier si 1
  117.   T_SOC soc;       // ANCIENNE STURCTURE - ID socket
  118.   FILE* fp;        // ANCIENNE STURCTURE - fichier pour file://
  119.   t_proxy proxy;   // ANCIENNE STURCTURE - proxy
  120.   int user_agent_send;  // ANCIENNE STURCTURE - user agent (ex: httrack/1.0 [sun])
  121.   char user_agent[64];
  122.   int http11;           // ANCIENNE STURCTURE - l'en tΩte doit Ωtre signΘ HTTP/1.1 et non HTTP/1.0
  123. } OLD_htsblk;
  124. /* fin ANCIENNE STURCTURE pour cache 1.0 */
  125.  
  126. // cache pour le dns, pour Θviter de faire des gethostbyname sans arrΩt
  127. typedef struct t_dnscache {
  128.   char iadr[1024];
  129.   struct t_dnscache* n;
  130.   char host_addr[HTS_MAXADDRLEN];    // 4 octets (v4), ou 16 octets (v6)
  131.   int host_length;                   // 4 normalement - ==0  alors en cours de rΘsolution
  132.                                      // ou >16 si sockaddr
  133.                                      //                 ==-1 alors erreur (host n'Θxiste pas)
  134. } t_dnscache;
  135.  
  136.  
  137.  
  138.  
  139. /*
  140. #ifdef __cplusplus
  141. extern "C" {
  142. #endif
  143. */
  144.  
  145. // fonctions unix/winsock
  146. int hts_read(htsblk* r,char* buff,int size);
  147. //int HTS_TOTAL_RECV_CHECK(int var);
  148. LLint check_downloadable_bytes(int rate);
  149.  
  150. int hts_init(void);
  151. int hts_uninit(void);
  152.  
  153.  
  154. // fonctions principales
  155. int http_fopen(char* adr,char* fil,htsblk* retour);
  156. int http_xfopen(int mode,int treat,int waitconnect,char* xsend,char* adr,char* fil,htsblk* retour);
  157. int http_sendhead(t_cookie* cookie,int mode,char* xsend,char* adr,char* fil,char* referer_adr,char* referer_fil,htsblk* retour);
  158. htsblk httpget(char* url);
  159. //int newhttp(char* iadr,char* err=NULL);
  160. int newhttp(char* iadr,htsblk* retour,int port,int waitconnect);
  161. HTS_INLINE void deletehttp(htsblk* r);
  162. HTS_INLINE void deletesoc(T_SOC soc);
  163. HTS_INLINE void deletesoc_r(htsblk* r);
  164. htsblk http_location(char* adr,char* fil,char* loc);
  165. htsblk http_test(char* adr,char* fil,char* loc);
  166. int check_readinput(htsblk* r);
  167. void http_fread(T_SOC soc,htsblk* retour);
  168. LLint http_fread1(htsblk* r);
  169. void treathead(t_cookie* cookie,char* adr,char* fil,htsblk* retour,char* rcvd);
  170. void treatfirstline(htsblk* retour,char* rcvd);
  171. void infostatuscode(char* msg,int statuscode);
  172.  
  173. // sous-fonctions
  174. htsblk xhttpget(char* adr,char* fil);
  175. htsblk http_gethead(char* adr,char* fil);
  176. LLint http_xfread1(htsblk* r,int bufl);
  177. HTS_INLINE t_hostent* hts_gethostbyname(char* iadr, void* v_buffer);
  178. t_hostent* vxgethostbyname(char* hostname, void* v_buffer);
  179. t_hostent* _hts_ghbn(t_dnscache* cache,char* iadr,t_hostent* retour);
  180. int ftp_available(void);
  181. #if HTS_DNSCACHE
  182. int hts_dnstest(char* _iadr);
  183. t_dnscache* _hts_cache(void);
  184. int _hts_lockdns(int i);
  185. #endif
  186.  
  187. // outils divers
  188. HTS_INLINE TStamp time_local(void);
  189. HTS_INLINE TStamp mtime_local(void);
  190. void sec2str(char *s,TStamp t);
  191. void qsec2str(char *st,TStamp t);
  192. void time_gmt_rfc822(char* s);
  193. void time_local_rfc822(char* s);
  194. struct tm* convert_time_rfc822(char* s);
  195. int set_filetime(char* file,struct tm* tm_time);
  196. int set_filetime_rfc822(char* file,char* date);
  197. HTS_INLINE void time_rfc822(char* s,struct tm * A);
  198. HTS_INLINE void time_rfc822_local(char* s,struct tm * A);
  199. char* int2char(int n);
  200. char* int2bytes(LLint n);
  201. char* int2bytessec(long int n);
  202. char** int2bytes2(LLint n);
  203. HTS_INLINE int sendc(htsblk* r, char* s);
  204. void finput(int fd,char* s,int max);
  205. int binput(char* buff,char* s,int max);
  206. int linput(FILE* fp,char* s,int max);
  207. int linput_trim(FILE* fp,char* s,int max);
  208. int linput_cpp(FILE* fp,char* s,int max);
  209. void rawlinput(FILE* fp,char* s,int max);
  210. int strfield(const char* f,const char* s);
  211. #define strfield2(f,s) ( (strlen(f)!=strlen(s)) ? 0 : (strfield(f,s)) )
  212. char* strstrcase(char *s,char *o);
  213. int ident_url_absolute(char* url,char* adr,char* fil);
  214. void fil_simplifie(char* f);
  215. int is_unicode_utf8(unsigned char* buffer, unsigned int size);
  216. int ishtml(char* urlfil);
  217. int ishtml_ext(char* a);
  218. int ishttperror(int err);
  219. void guess_httptype(char *s,char *fil);
  220. void get_httptype(char *s,char *fil,int flag);
  221. int get_userhttptype(int setdefs,char *s,char *ext);
  222. void give_mimext(char *s,char *st);
  223. int is_knowntype(char *fil);
  224. int is_userknowntype(char *fil);
  225. int is_dyntype(char *fil);
  226. char* get_ext(char *fil);
  227. int may_unknown(char* st);
  228. char* jump_identification(char*);
  229. char* jump_toport(char*);
  230. char* strrchr_limit(char* s, char c, char* limit);
  231. HTS_INLINE char* jump_protocol(char* source);
  232. void code64(char* a,char* b);
  233. void unescape_amp(char* s);
  234. void escape_spc_url(char* s);
  235. void escape_in_url(char* s);
  236. void escape_uri(char* s);
  237. void escape_uri_utf(char* s);
  238. void escape_check_url(char* s);
  239. char* escape_check_url_addr(char* s);
  240. void x_escape_http(char* s,int mode);
  241. HTS_INLINE int ehexh(char c);
  242. char* unescape_http(char* s);
  243. char* unescape_http_unharm(char* s, int no_high);
  244. char* antislash_unescaped(char* s);
  245. int ehex(char* s);
  246. char* concat(const char* a,const char* b);
  247. #define copychar(a) concat((a),NULL)
  248. #if HTS_DOSNAME
  249. char* fconcat(char* a,char* b);
  250. char* fconv(char* a);
  251. #else
  252. #define fconv(a) (a)
  253. #define fconcat(a,b) concat(a,b)
  254. #endif
  255. char* fslash(char* a);
  256. char* __fslash(char* a);
  257.  
  258. char* convtolower(char* a);
  259. char* concat(const char* a,const char* b);
  260. void hts_lowcase(char* s);
  261. void hts_replace(char *s,char from,char to);
  262.  
  263. /* Spaces: CR,LF,TAB,FF */
  264. #define  is_space(c)      ( ((c)==' ') || ((c)=='\"') || ((c)==10) || ((c)==13) || ((c)==9) || ((c)==12) || ((c)=='\'') )
  265. #define  is_realspace(c)  ( ((c)==' ')                || ((c)==10) || ((c)==13) || ((c)==9) || ((c)==12)                )
  266. #define  is_taborspace(c) ( ((c)==' ')                                          || ((c)==9)                             )
  267. #define  is_quote(c)      (               ((c)=='\"')                                                    || ((c)=='\'') )
  268. //HTS_INLINE int is_space(char);
  269. //HTS_INLINE int is_realspace(char);
  270.  
  271. void fprintfio(FILE* fp,char* buff,char* prefix);
  272.  
  273. #if HTS_WIN
  274. #else
  275. int sig_ignore_flag( int setflag );     // flag ignore
  276. #endif
  277.  
  278. void cut_path(char* fullpath,char* path,char* pname);
  279. int fexist(char* s);
  280. /*LLint fsize(char* s);    */
  281. int fpsize(FILE* fp);
  282. int fsize(char* s);    
  283. /* root dir */
  284. char* hts_rootdir(char* file);
  285.  
  286. // Threads
  287. #if USE_PTHREAD
  288. typedef void* ( *beginthread_type )( void * );
  289. unsigned long _beginthread( beginthread_type start_address, unsigned stack_size, void *arglist );
  290. #endif
  291.  
  292. /*
  293. #ifdef __cplusplus
  294. }
  295. #endif
  296. */
  297.  
  298.  
  299.  
  300. /* variables globales */
  301. //extern LLint HTS_TOTAL_RECV;  // flux entrant reτu
  302. //extern int HTS_TOTAL_RECV_STATE;  // status: 0 tout va bien 1: ralentir un peu 2: ralentir 3: beaucoup
  303. extern hts_stat_struct HTS_STAT;
  304. extern int _DEBUG_HEAD;
  305. extern FILE* ioinfo;
  306.  
  307. /* constantes */
  308. extern const char hts_mime_keep[][32];
  309. extern const char hts_mime[][2][32];
  310. extern const char hts_detect[][32];
  311. extern const char hts_detectbeg[][32];
  312. extern const char hts_nodetect[][32];
  313. extern const char hts_detectURL[][32];
  314. extern const char hts_detectandleave[][32];
  315. extern const char hts_detect_js[][32];
  316.  
  317. // defaut wrappers
  318. void  __cdecl htsdefault_init(void);
  319. void  __cdecl htsdefault_uninit(void);
  320. int   __cdecl htsdefault_start(void* opt);
  321. int   __cdecl htsdefault_chopt(void* opt);
  322. int   __cdecl htsdefault_end(void);
  323. int   __cdecl htsdefault_checkhtml(char* html,int len,char* url_adresse,char* url_fichier);
  324. int   __cdecl htsdefault_loop(void* back,int back_max,int back_index,int lien_n,int lien_tot,int stat_time,hts_stat_struct* stats);
  325. char* __cdecl htsdefault_query(char* question);
  326. char* __cdecl htsdefault_query2(char* question);
  327. char* __cdecl htsdefault_query3(char* question);
  328. int   __cdecl htsdefault_check(char* adr,char* fil,int status);
  329. void  __cdecl htsdefault_pause(char* lockfile);
  330. void  __cdecl htsdefault_filesave(char*);
  331. int   __cdecl htsdefault_linkdetected(char* link);
  332. int   __cdecl htsdefault_xfrstatus(void* back);
  333. int   __cdecl htsdefault_savename(char* adr_complete,char* fil_complete,char* referer_adr,char* referer_fil,char* save);
  334. // end defaut wrappers
  335.  
  336. #endif
  337.  
  338.  
  339.